{ "cells": [ { "cell_type": "markdown", "id": "5fbc2d16-59f9-4be3-b93e-1a5440c7efd0", "metadata": {}, "source": [ "# Tutorial 1 - Getting Started" ] }, { "cell_type": "markdown", "id": "1afe6a1e-3ab4-4f3f-ad47-f6cd66419504", "metadata": {}, "source": [ "In this first tutorial notebook we will be creating a simple KAN model and train it to perform function fitting." ] }, { "cell_type": "code", "execution_count": 1, "id": "0a2ef2a6-f681-427f-8252-ade2111ce0e6", "metadata": {}, "outputs": [], "source": [ "from jaxkan.models.KAN import KAN\n", "\n", "import jax\n", "import jax.numpy as jnp\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import mean_squared_error\n", "\n", "from flax import nnx\n", "import optax\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import os\n", "os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"2\"" ] }, { "cell_type": "code", "execution_count": null, "id": "165f5be0-7c91-4a15-8c93-1681dd66ee6a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "60e70a5d-0340-4bdc-af4e-150d0098a87e", "metadata": {}, "source": [ "## Data Generation" ] }, { "cell_type": "markdown", "id": "166ad90d-430e-45ca-86a8-e6e4dbc1c943", "metadata": {}, "source": [ "We begin with the generation of some mock data. Consider the function $f(x, y) = x^2 + 2\\exp(y)$. We will attempt to fit a KAN model on synthetic data generated from this function and then evaluate its performance." ] }, { "cell_type": "code", "execution_count": 2, "id": "b986e75a-6d4a-402f-bea7-36d13f4a7866", "metadata": {}, "outputs": [], "source": [ "def f(x,y):\n", " return x**2 + 2*jnp.exp(y)\n", "\n", "def generate_data(minval=-1, maxval=1, num_samples=1000, seed=42):\n", " key = jax.random.PRNGKey(seed)\n", " x_key, y_key = jax.random.split(key)\n", "\n", " x1 = jax.random.uniform(x_key, shape=(num_samples,), minval=minval, maxval=maxval)\n", " x2 = jax.random.uniform(y_key, shape=(num_samples,), minval=minval, maxval=maxval)\n", "\n", " y = f(x1, x2).reshape(-1, 1)\n", " X = jnp.stack([x1, x2], axis=1)\n", " \n", " return X, y" ] }, { "cell_type": "code", "execution_count": 3, "id": "db8bf4bc-49fe-4014-94aa-4e5dbf632369", "metadata": {}, "outputs": [], "source": [ "seed = 42\n", "\n", "X, y = generate_data(minval=-1, maxval=1, num_samples=1000, seed=seed)" ] }, { "cell_type": "code", "execution_count": null, "id": "c2494fde-d2c1-45c7-b25d-00e184d8ee7d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "485197f9-2e41-481e-a2cd-977452622ff3", "metadata": {}, "source": [ "## Preprocessing" ] }, { "cell_type": "markdown", "id": "c26fac97-6716-47ff-b8db-824df7c6aae2", "metadata": {}, "source": [ "With the data at hand, we may perform the usual train/test splitting." ] }, { "cell_type": "code", "execution_count": 4, "id": "ad91a42a-ffe8-4b8c-b1a7-cc9b60dfe5c0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set size: (800, 2)\n", "Test set size: (200, 2)\n" ] } ], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed)\n", "\n", "print(\"Training set size:\", X_train.shape)\n", "print(\"Test set size:\", X_test.shape)" ] }, { "cell_type": "markdown", "id": "c7a3aa9e-3088-42b1-8a09-f0f5efca9e1a", "metadata": {}, "source": [ "Note that the shapes of the objects are `(batch, input_dim)`." ] }, { "cell_type": "code", "execution_count": null, "id": "04ccf46a-8b98-470b-8dd0-7e9831dfb6de", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4e9d9bba-71e2-4d5b-95b1-36167fb70c1a", "metadata": {}, "source": [ "## KAN Model" ] }, { "cell_type": "markdown", "id": "2fd54c6c-3d28-4864-af38-3b22875d0f0a", "metadata": {}, "source": [ "Selecting and initializing a jaxKAN model is straightforward. Here we focus on the most basic model, `KAN`, where one needs to define the following arguments, which are universal for all KAN Layer types:\n", "\n", "- `layer_dims`: The dimensions for each of the network's layers' input/output nodes.\n", "- `layer_type`: The type of KAN layer to use, which defaults to `base` (more details can be found in the next tutorial for other layer types).\n", "- `seed`: An integer for reproducibility.\n", "\n", "Apart from these, there is also the `required_parameters` argument, which is simply a dictionary with keys that correspond to additional parameters of the specific chosen layer.\n", "\n", "We will use a Chebyshev Layer for the present example. Note that not only other layer types, but also other models can be used instead of `KAN` (examples can be found in subsequent tutorials)." ] }, { "cell_type": "code", "execution_count": 5, "id": "b350b56f-5daa-411f-9090-b544760c34ef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[38;2;79;201;177mKAN\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # Param: 283 (1.1 KB), RngState: 6 (36 B), Total: 289 (1.2 KB)\u001b[0m\n", " \u001b[38;2;156;220;254mlayer_type\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'chebyshev'\u001b[0m,\n", " \u001b[38;2;156;220;254mlayers\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mList\u001b[0m\u001b[38;2;255;213;3m([\u001b[0m\u001b[38;2;105;105;105m\u001b[0m\n", " \u001b[38;2;212;212;212m\u001b[0m\u001b[38;2;79;201;177mChebyshevLayer\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # Param: 66 (264 B), RngState: 2 (12 B), Total: 68 (276 B)\u001b[0m\n", " \u001b[38;2;156;220;254mn_in\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m2\u001b[0m,\n", " \u001b[38;2;156;220;254mn_out\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\n", " \u001b[38;2;156;220;254mD\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m5\u001b[0m,\n", " \u001b[38;2;156;220;254mflavor\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'exact'\u001b[0m,\n", " \u001b[38;2;156;220;254mresidual\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mrngs\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngs\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mdefault\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngStream\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m,\n", " \u001b[38;2;156;220;254mkey\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngKey\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (8 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray((), dtype=key) overlaying:\n", " [ 0 42],\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mcount\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngCount\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (4 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray(1, dtype=uint32),\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mbias\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 6 (24 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mArray\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;156;220;254mshape\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\u001b[38;2;255;213;3m)\u001b[0m, \u001b[38;2;156;220;254mdtype\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mdtype('float32')\u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mc_ext\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mc_basis\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 60 (240 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mArray\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;156;220;254mshape\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m, \u001b[38;2;182;207;169m2\u001b[0m, \u001b[38;2;182;207;169m5\u001b[0m\u001b[38;2;255;213;3m)\u001b[0m, \u001b[38;2;156;220;254mdtype\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mdtype('float32')\u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;212;212;212m\u001b[0m\u001b[38;2;79;201;177mChebyshevLayer\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # Param: 186 (744 B), RngState: 2 (12 B), Total: 188 (756 B)\u001b[0m\n", " \u001b[38;2;156;220;254mn_in\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\n", " \u001b[38;2;156;220;254mn_out\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\n", " \u001b[38;2;156;220;254mD\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m5\u001b[0m,\n", " \u001b[38;2;156;220;254mflavor\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'exact'\u001b[0m,\n", " \u001b[38;2;156;220;254mresidual\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mrngs\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngs\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mdefault\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngStream\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m,\n", " \u001b[38;2;156;220;254mkey\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngKey\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (8 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray((), dtype=key) overlaying:\n", " [ 0 42],\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mcount\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngCount\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (4 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray(1, dtype=uint32),\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mbias\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 6 (24 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mArray\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;156;220;254mshape\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\u001b[38;2;255;213;3m)\u001b[0m, \u001b[38;2;156;220;254mdtype\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mdtype('float32')\u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mc_ext\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mc_basis\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 180 (720 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mArray\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;156;220;254mshape\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m, \u001b[38;2;182;207;169m6\u001b[0m, \u001b[38;2;182;207;169m5\u001b[0m\u001b[38;2;255;213;3m)\u001b[0m, \u001b[38;2;156;220;254mdtype\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mdtype('float32')\u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;212;212;212m\u001b[0m\u001b[38;2;79;201;177mChebyshevLayer\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # Param: 31 (124 B), RngState: 2 (12 B), Total: 33 (136 B)\u001b[0m\n", " \u001b[38;2;156;220;254mn_in\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m6\u001b[0m,\n", " \u001b[38;2;156;220;254mn_out\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m1\u001b[0m,\n", " \u001b[38;2;156;220;254mD\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;182;207;169m5\u001b[0m,\n", " \u001b[38;2;156;220;254mflavor\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'exact'\u001b[0m,\n", " \u001b[38;2;156;220;254mresidual\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mrngs\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngs\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mdefault\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngStream\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # RngState: 2 (12 B)\u001b[0m\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m,\n", " \u001b[38;2;156;220;254mkey\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngKey\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (8 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray((), dtype=key) overlaying:\n", " [ 0 42],\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mcount\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mRngCount\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (4 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray(1, dtype=uint32),\n", " \u001b[38;2;156;220;254mtag\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;207;144;120m'default'\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mbias\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 1 (4 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mArray([0.], dtype=float32)\n", " \u001b[38;2;255;213;3m)\u001b[0m,\n", " \u001b[38;2;156;220;254mc_ext\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;86;156;214mNone\u001b[0m,\n", " \u001b[38;2;156;220;254mc_basis\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mParam\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;105;105;105m # 30 (120 B)\u001b[0m\n", " \u001b[38;2;156;220;254mvalue\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;79;201;177mArray\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;156;220;254mshape\u001b[0m\u001b[38;2;212;212;212m=\u001b[0m\u001b[38;2;255;213;3m(\u001b[0m\u001b[38;2;182;207;169m1\u001b[0m, \u001b[38;2;182;207;169m6\u001b[0m, \u001b[38;2;182;207;169m5\u001b[0m\u001b[38;2;255;213;3m)\u001b[0m, \u001b[38;2;156;220;254mdtype\u001b[0m\u001b[38;2;212;212;212m=\u001b[0mdtype('float32')\u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m)\u001b[0m\n", " \u001b[38;2;255;213;3m])\u001b[0m\n", "\u001b[38;2;255;213;3m)\u001b[0m\n" ] } ], "source": [ "# Initialize a KAN model\n", "n_in = X_train.shape[1]\n", "n_out = y_train.shape[1]\n", "n_hidden = 6\n", "\n", "layer_dims = [n_in, n_hidden, n_hidden, n_out]\n", "req_params = {'D': 5, 'flavor': 'exact'}\n", "\n", "model = KAN(layer_dims = layer_dims,\n", " layer_type = 'chebyshev',\n", " required_parameters = req_params,\n", " seed = 42\n", " )\n", "\n", "print(model)" ] }, { "cell_type": "code", "execution_count": null, "id": "200bd1f2-dd5a-44bb-90d2-1db225ece82a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f681d135-c885-4e59-87d7-1ea16a157c50", "metadata": {}, "source": [ "## Training" ] }, { "cell_type": "markdown", "id": "9044aebb-696d-42df-956f-9aa94078588c", "metadata": {}, "source": [ "To train the model on the data, we must first define an optimizer using the `optax` framework. For this example, we will define a simple Adam optimizer and wrap the optax optimizer and the model in a `nnx.Optimizer` object." ] }, { "cell_type": "code", "execution_count": 7, "id": "6723a412-c313-453c-aa88-9274687ee54e", "metadata": {}, "outputs": [], "source": [ "opt_type = optax.adam(learning_rate=0.001)\n", "\n", "optimizer = nnx.Optimizer(model, opt_type, wrt=nnx.Param)" ] }, { "cell_type": "markdown", "id": "eaac2ddc-ad53-40db-804b-7f54f3000476", "metadata": {}, "source": [ "We will then define the training step and decorate it with `@nnx.jit` to make it faster. The loss function will be a simple MSE Loss." ] }, { "cell_type": "code", "execution_count": 10, "id": "f18ab849-3c05-418a-a30b-3928f77c332d", "metadata": {}, "outputs": [], "source": [ "# Define train loop\n", "@nnx.jit\n", "def train_step(model, optimizer, X_train, y_train):\n", "\n", " def loss_fn(model):\n", " residual = model(X_train) - y_train\n", " loss = jnp.mean((residual)**2)\n", "\n", " return loss\n", " \n", " loss, grads = nnx.value_and_grad(loss_fn)(model)\n", " optimizer.update(model, grads)\n", " \n", " return loss" ] }, { "cell_type": "markdown", "id": "15698049-2246-458a-9a0b-9e0c0c4c6485", "metadata": {}, "source": [ "At this point we may begin training the model and keep some logs, e.g., the training loss per epoch." ] }, { "cell_type": "code", "execution_count": 11, "id": "b06282a5-8899-4801-9c9e-d8b73b55d74a", "metadata": {}, "outputs": [], "source": [ "# Initialize train_losses\n", "num_epochs = 2000\n", "train_losses = jnp.zeros((num_epochs,))\n", "\n", "for epoch in range(num_epochs):\n", " # Calculate the loss\n", " loss = train_step(model, optimizer, X_train, y_train)\n", " \n", " # Append the loss\n", " train_losses = train_losses.at[epoch].set(loss)" ] }, { "cell_type": "code", "execution_count": null, "id": "53ca2bde-ed20-4559-abf7-9a2af55fb9a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "faab949e-dadb-4cec-bc13-63b10cb609c5", "metadata": {}, "source": [ "## Evaluation" ] }, { "cell_type": "markdown", "id": "ebd10d7b-064a-4701-a8f3-6ec20281724f", "metadata": {}, "source": [ "First, we may plot the training losses to see if the model is indeed trained, i.e. backpropagation works as it should." ] }, { "cell_type": "code", "execution_count": 12, "id": "86630d29-9b9f-452a-b2f1-399b02768829", "metadata": {}, "outputs": [ { "data": { "image/png": "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DdAGDRqk1dTU6Os/+OADDdD++te/aprW877QNE0777zztKCgIN3TSnt7e6f23XjjjTbbzJ49WxswYIC+/Je//EUDtLKysh55C4IrI49QBaGfYTabWbhwYaf11jsfALW1tZSXl3PuuefS0NBAfn7+afc7d+5cwsLC9OVzzz0XgAMHDpz2sxkZGSQmJurLKSkpBAcH65+1WCysXbuWWbNmERsbq283fPhwZsyYcdr994SsrCxKS0u59dZb8fX11ddfdtlljB49mi+++ALoOE4+Pj6sW7eOysrKLvdlvTv0+eef09ra2uM21NbWAhAUFHTKbazv1dTUABAcHMyMGTP44IMP0DRN3+7999/nrLPOYsiQIQB88skntLe3c/XVV1NeXq7/xMTEMGLECL777jub7znVedIdH3/8MWvWrLH5WblyZaftbrjhBhvHq666ioEDB/Lll18CPe+LsrIyvv/+e2688Ubd00pXj9Vvvvlmm+Vzzz2X48eP68fS2m+ffvpprwfqCIKrIAGcIPQzBg0ahI+PT6f1O3fuZPbs2YSEhBAcHExkZKQ+AKK6uvq0+z35D6g1mDtVkNPdZ62ft362tLSUxsZGhg8f3mm7rtb1hoMHDwIwatSoTu+NHj1af99sNvPHP/6Rr776iujoaM477zyeeeYZm1IZ559/PldeeSVLliwhIiKCK664gpUrV9Lc3NxtG6xBjTWQ64qugry5c+dy+PBhNmzYAMD+/fvJzs5m7ty5+jZ79+5F0zRGjBhBZGSkzU9eXh6lpaU233Oq86Q7zjvvPDIyMmx+pk6d2mm7ESNG2CybTCaGDx+u5xD2tC+sAX5ycnKP2ne6c3Tu3LmcffbZ/PKXvyQ6OpprrrmGDz74QII5wS2RAE4Q+hkn3mmzUlVVxfnnn8/WrVt59NFH+d///V/WrFmj5wb15A+Yp6dnl+tPvCvkiM8awZ133smePXt46qmn8PX15cEHHyQpKYktW7YAHQHJRx99xIYNG1i8eDFHjx7lxhtvJC0tjbq6ulPu11riZdu2bafcxvremDFj9HUzZ87E39+fDz74AIAPPvgADw8P/ud//kffpr29HZPJxNdff93pLtmaNWt45ZVXbL6nq/PE3Tndeebn58f333/P2rVruf7669m2bRtz587lpz/9aafBPILg6kgAJwgKsG7dOo4fP87rr7/OHXfcweWXX05GRobNI1EjiYqKwtfXl3379nV6r6t1vWHo0KEA7N69u9N7u3fv1t+3kpiYyN13382//vUvduzYQUtLC3/+859ttjnrrLN44oknyMrK4h//+Ac7d+7kvffeO2UbrKMf33nnnVMGDG+++SbQMfrUSkBAAJdffjkffvgh7e3tvP/++5x77rk2j5sTExPRNI2EhIROd8kyMjI466yzTnOE7MfevXttljVNY9++ffro5p72hXX07Y4dO+zWNg8PD6ZPn87SpUvZtWsXTzzxBN9++22nR8yC4OpIACcICmC9M3HiHa+WlhZefPFFo5pkg6enJxkZGaxevZqioiJ9/b59++xWD23SpElERUXx8ssv2zzq/Oqrr8jLy+Oyyy4DOuqhNTU12Xw2MTGRoKAg/XOVlZWd7h5OmDABoNvHqP7+/txzzz3s3r27yzIYX3zxBa+//joXX3xxp4Br7ty5FBUV8eqrr7J161abx6cAc+bMwdPTkyVLlnRqm6ZpHD9+/JTtsjdvvvmmzWPijz76iGPHjun5jD3ti8jISM477zxWrFjBoUOHbL6jN3dvuxpF25N+EwRXRMqICIICTJs2jbCwMObPn8+vf/1rTCYTb731lks9wnzkkUf417/+xdlnn80tt9yCxWLhhRdeIDk5mdzc3B7to7W1lccff7zT+vDwcG699Vb++Mc/snDhQs4//3zmzZunl66Ij4/nN7/5DQB79uxh+vTpXH311YwZMwYvLy9WrVpFSUkJ11xzDQBvvPEGL774IrNnzyYxMZHa2lr+/ve/ExwczKWXXtptG++77z62bNnCH//4RzZs2MCVV16Jn58f//3vf3n77bdJSkrijTfe6PS5Sy+9lKCgIO655x48PT258sorbd5PTEzk8ccf5/7776ewsJBZs2YRFBREQUEBq1atYtGiRdxzzz09Oo6n4qOPPupyJoaf/vSnNmVIwsPDOeecc1i4cCElJSUsW7aM4cOHc9NNNwEdxaJ70hcAzz33HOeccw6pqaksWrSIhIQECgsL+eKLL3p8Xlh59NFH+f7777nssssYOnQopaWlvPjiiwwePJhzzjmndwdFEIzCkLGvgiD0mVOVERk7dmyX2//www/aWWedpfn5+WmxsbHa7373O+2f//ynBmjfffedvt2pyoh0VVYD0B5++GF9+VRlRG677bZOnx06dKg2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s5mUlBR9GpqYmBgCAgL04z1mzBiKi4upqKjodLyjoqIICQnRj/fo0aMpLy+nvLxcP2etxzsiIoKIiAjy8/P1c7a6uprS0tJO52x4eDgxMTHs2rVLP2fr6+v14z158mS2bdtGc3MzoaGhxMXF6edsQkICLS0tHD16VD9nT7xG1NXV6Y8P+3KNSElJobCw0G2uERaLhd+9fYDSqh//IT4TYsPMPDJ3GDFR4QwZMsQtrhEFBQVERkb2+RphLU/hLteIdevW6b8XfblGHD58mKqqKre5RuzatQuzuWNEdl+uEV3FEfn5+UyfPt29A7iWlhb8/f356KOPbIK6+fPnU1VVxaeffnrafWqaxrXXXsuoUaN45JFHut3WqDtwmZmZpKenO2z/roqK3io6g3irRlfefblL5+vjyYeP/ozhg0Px9DA886dLpK/VwpHe/WIUanl5ORaLhejoaJv10dHRetR8On744Qfef/99UlJS9Py6t956i3HjxnXa1mw26xG1M3GFis5GoKK3is4g3qrRlffJNemg5yNem1oszLxvlc26IdFBvPvw5USG+vetsXZC+lotXMHbpQM4e3DOOee4xKSz3XFygKoKKnqr6AzirRo99f748StslntaaBjgUEktZ9/6rs26ackdZUx8fZz/p036Wi1cwdulA7iIiAg8PT31XCsrJSUlxMTEOOx7ly9fzvLly7FYLABkZWU5NAfOYrEQFhbmNvkt9sqBq62tZdq0aW6R32KvHLiNGzcSFhbmNvkt9sqB27x5M4GBgW6T32KvHLiqqio8PT31461KDlxLSwtxcXFnfI0YFgQ735yvXyNCQkJY9MIWiisa6AnrdxSRsuANfTnY35sHr4onOrTjODjyGnHgwAGioqKUy4Fbv349YWFhyuXAbd++HX//jru/jsiB6wkunQMHHQdxypQpPP/880DHIIYhQ4awePHiHg9i6C3OmolBcgjUQUVnEG/VcKT3mdyl64r4mGA+fPRnhATaN11G+lotJAcOqKur0/8bBCgoKCA3N5fw8I7RR3fddRfz589n0qRJTJkyhWXLllFfX8/ChQsNbLV9GT58uNFNMAQVvVV0BvFWDUd6z8tIYl5Gks26MxkgUVhcw+RFb+vLJhMsmpnCr69Kw9ur9wMkpK/VwhW8DQ/gsrKyuPDCHxNb77rrLqBjpOnrr7/O3LlzKSsr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7, 4))\n", "\n", "plt.plot(np.array(train_losses), label='Train Loss', marker='o', color='#25599c', markersize=1)\n", "\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Loss')\n", "plt.title('Training Loss Over Epochs')\n", "plt.yscale('log')\n", "\n", "plt.legend()\n", "plt.grid(True, which='both', linestyle='--', linewidth=0.5) \n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "6c30911f-2a7a-4589-9b0b-471cd4891440", "metadata": {}, "source": [ "Indeed, the model is trained as it should. The final step is to evaluate its performance on the test set." ] }, { "cell_type": "code", "execution_count": 13, "id": "7798eb68-d6b5-47ec-b845-cf3d60dccf23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The MSE of the fit is 0.00562\n" ] } ], "source": [ "y_pred = model(X_test)\n", "mse = mean_squared_error(y_test, y_pred)\n", "\n", "print(f\"The MSE of the fit is {mse:.5f}\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "f061b2a3-b14c-4c82-a74d-c077016ca7a2", "metadata": {}, "outputs": [ { "data": { "image/png": "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Dz744B9fd/PNNzNv3jwcDgdfffUV9erVC/VdSZ06deKll17ijz/+YOrUqWzevJlp06ad8Lpdu3bFZrMxbdq0015tl5iYSERExAn7TavVhhYrBEf4ji+4efzIYEXUrVu31OcHSv+cVLaK3MupTlkLUVESYIlzUmRkJO+//z7PP/8811133QnP69OnD4FAgHfffTfs+BtvvIFGowmtRAz+efwqxDfffDPssU6no3///syYMaPMYCM7O/tUbue09OvXD51Ox+jRo0v9Fq6qaiivp2PHjiQmJvLBBx/g9XpD50yePPkfq14nJibSrVs3Jk6cyIEDB0q9R1CwJld5qmj36dOHVatWsXz58tAxp9PJRx99RL169cJyj8rD4XDg9/vDjrVu3RqtVvuP03hQPE3o8XiYMmUK8+bN4+abbw57Pi8vr1T/tmvXDuCk14+IiOCpp55i06ZNjBw5ssyRkvKOnuh0Oq666iq+++67sNIDmZmZoQK80dHRAKHp7iVLloTOC+b1nao+ffqwYsUKVq1aFTqWnZ3N1KlTT/ma5REdHU1CQkLYvQC89957pc6tyGdQiNMhU4TinHWiKbqSrrvuOnr06MHTTz/Nvn37aNu2LQsWLOC7777jkUceCf0n1K5dOwYOHMh7772H3W6nc+fO/Pzzz6XqLEFxuYBff/2Viy++mLvuuosWLVqQm5vL2rVr+emnn8jNza30ez2Zhg0b8uKLLzJq1Cj27dtH3759iYqKYu/evXz77bfcfffdPPHEExgMBl588UXuueceLr/8cm655Rb27t3LpEmT/jEHC4qDz0svvZT27dtz9913U79+ffbt28ecOXNYv349AB06dADg6aef5tZbb8VgMHDdddeVWQx15MiRoXIbDz30EHFxcUyZMoW9e/cyY8aMCld9/+WXX3jggQcYMGAATZo0we/389lnn4WC4n/Svn17GjVqxNNPP43H4wmbHgSYMmUK7733HjfeeCMNGzakoKCAjz/+mOjoaPr06XPSa48cOZKtW7cyfvx4FixYQP/+/alduzZ5eXmsXbuW6dOnk5SUVK4ioi+++CILFy7k0ksv5f7770ev1/Phhx/i8Xh49dVXQ+ddddVV1KlTh+HDh/Pkk0+i0+mYOHEiiYmJpYLk8nrqqaf47LPP6N27Nw8//HCoTEPdunX5888/T+ma5XXnnXcybtw4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rfcBwv4M/t1kMpGamkq9evW4//77ufLKK/nhhx/QaDTccccd3Hjjjbz88sukpaXRrFkzNBoNhw4d4pZbbiE2Npb4+Hj69u3L/v37Q9dVFIXHH3+c2NhYEhIS+Ne//hWaHgue06NHDx599NHQY6/Xy8iRI6lTpw5ms5nGjRszceJE9u/fz+WXXw5AXFwcWq2WO+64A41Gg6qqjBs3jgYNGhAREUG7du2YMWNG2H3/+OOPNG3alIiICC6//HL2798f1o7jvwYPHsytt94adszv95OYmMhnn32GRqNhxowZtGnThoiICBISEujZsydFRWV/f4LvNWnSJK699lruv/9+pk2bhtvtDjvPbrdz7733kpKSElrlOmfOHBYvXsywYcOw2+2hz9vo0aPRaIp/a/ruu+/CrhMbG8uUKVNCj0eOHEnTpk2xWq00bNiQZ599Fr/fX2YbT/R1os/92f5Vk9tek7+k36XPz5WvlVuP0v+ZH/hpzYHQsUE9WzD12Wto0yipSvq9PKo1wOrSpQvbt28PO7Zjxw7q1q1bTS36m9/rxudy4LJnsn7maNwFOUDxyNX6maNx2TPxuRz4ve5/uFLlsFgseL3e0OOff/6Z7du3s3DhQmbPno3P56NXr15ERUXx22+/8fvvvxMZGUnv3r1Dr3vttdeYPHkyEydOZOnSpeTm5oZyr07k9ttv58svv+Ttt99m69atfPjhh0RGRpKens6MGTMA2L59OxkZGbz11ltA8VTup59+ygcffMDmzZt59NFHue2221i8eDEABw8epF+/flx33XWsX7+eO++8k5EjR560HYMHD+aHH36gsLAwdGz+/PkUFRVx4403kpGRwcCBAxk2bBhbt25l0aJF9OvX76T5VaqqMnnyZG677TaaNWtGo0aN+Oabb0LPK4rC1Vdfze+//87nn3/Oli1bGDduHDqdjs6dO/Pmm28SHR1NRkYGGRkZPPHEEye9h5KioqKYPHkyW7Zs4a233uLjjz/mjTfeKPfrhRDifLM3w859ry1kyEs/sm1/Lh/M2hD6N16r/fsX07OGWo1WrVql6vV69aWXXlJ37typTp06VY2IiFA///zzcr3ebrergGq320s953K51C1btqgul+uU2+dyHFOXT35Q/eWtm9Xlkx9U8w9vC3vschw75WsHKYqier1eVVGU0LEhQ4aoN9xwQ+j5hQsX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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7, 4))\n", "plt.scatter(y_test, y_pred, alpha=0.7, color='#a3630f', marker='x', label='Predicted vs Actual')\n", "plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], color='#25599c', linestyle='--', label='Perfect Fit')\n", "plt.xlabel('Actual Values')\n", "plt.ylabel('Predicted Values')\n", "plt.title('Model Predictions vs Ground Truth')\n", "plt.legend()\n", "plt.grid(alpha=0.3)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "88cc341a-8869-4dd9-be77-ef9bf2d8b5c1", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }